﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;

namespace SocketServidor
{
    public partial class SocketServidor : Form
    {
        private delegate void AtualizaStatusCallback(string strMensagem);

        public SocketServidor()
        {
            InitializeComponent();
        }

        public void btnAtender_Click(object sender, System.EventArgs e)
        {
            //if (txtIP.Text==string.Empty)
            //{
            //    MessageBox.Show("Informe o endereço IP.");
            //    txtIP.Focus();
            //    return;
            //}

            //try
            //{

            //    // Analisa o endereço IP do servidor informado no textbox
            //    IPAddress enderecoIP = IPAddress.Parse(txtIP.Text);

            //    // Cria uma nova instância do objeto ChatServidor
            //    ChatServidor mainServidor = new ChatServidor(enderecoIP);

            //    // Vincula o tratamento de evento StatusChanged a mainServer_StatusChanged
            //    ChatServidor.StatusChanged += new StatusChangedEventHandler(mainServidor_StatusChanged);

            //    // Inicia o atendimento das conexões
            //    mainServidor.IniciaAtendimento();

            //    // Mostra que nos iniciamos o atendimento para conexões
            //    txtLog.AppendText("Monitorando as conexões...\r\n");
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show("Erro de conexão : " + ex.Message);
            //}
        }

        public void mainServidor_StatusChanged(object sender, StatusChangedEventArgs e)
        {
            // Chama o método que atualiza o formulário
            try
            {
                this.Invoke(new AtualizaStatusCallback(this.AtualizaStatus), new object[] { e.EventMessage });
            }
            catch { }
        }

        private void AtualizaStatus(string strMensagem)
        {
            // Atualiza o logo com mensagens
            txtLog.AppendText(strMensagem + "\r\n");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            if (txtIP.Text == string.Empty)
            {
                MessageBox.Show("Informe o endereço IP.");
                txtIP.Focus();
                return;
            }

            try
            {

                // Analisa o endereço IP do servidor informado no textbox
                IPAddress enderecoIP = IPAddress.Parse(txtIP.Text);

                // Cria uma nova instância do objeto ChatServidor
                ChatServidor mainServidor = new ChatServidor(enderecoIP);

                // Vincula o tratamento de evento StatusChanged a mainServer_StatusChanged
                ChatServidor.StatusChanged += new StatusChangedEventHandler(mainServidor_StatusChanged);

                // Inicia o atendimento das conexões
                mainServidor.IniciaAtendimento();

                // Mostra que nos iniciamos o atendimento para conexões
                txtLog.AppendText("Monitorando as conexões...\r\n");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro de conexão : " + ex.Message);
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            txtLog.Clear();
        }
    }
}
